//题目：POJ1222熄灯问题
//题目描述：有一个由按钮组成的矩阵，其中每行有6个按钮，共5行，
//每个按钮的位置上有一盏灯，当按下一个按钮后，该按钮以及周围位置(上边，下边,左边，右边)的灯都会改变状态。
//如果灯原来是点亮的，就会被熄灭；如果灯原来是熄灭的,则会被点亮。在矩阵角上的按钮改变3盏灯的状态；
//在矩阵边上的按钮改变4盏灯的状态；其他的按钮改变5盏灯的状态。
//与一盏灯毗邻的多个按钮被按下时，一个操作会抵消另一次操作的结果。
//给定矩阵中每盏灯的初始状态，求一种按按钮方案，使得所有的灯都熄灭。
//
//输入样例
//2
//0 1 1 0 1 0
//1 0 0 1 1 1
//0 0 1 0 0 1
//1 0 0 1 0 1
//0 1 1 1 0 0
//0 0 1 0 1 0
//1 0 1 0 1 1
//0 0 1 0 1 1
//1 0 1 1 0 0
//0 1 0 1 0 0
//
//输出样例
//PUZZLE #1
//1 0 1 0 0 1
//1 1 0 1 0 1
//0 0 1 0 1 1
//1 0 0 1 0 0
//0 1 0 0 0 0
//PUZZLE #2
//1 0 0 1 1 1
//1 1 0 0 0 0
//0 0 0 1 0 0
//1 1 0 1 0 1
//1 0 1 1 0 1

#include<iostream>
#include <cstring>
using namespace std;
char oriLights[5];  //存放输入原始灯状态矩阵
char lights[5];  //变化中灯矩阵
char result[5];  //最终结果矩阵
//一个字符代表一行灯开光状态
int GetBit(char c, int i) //取字符c的第i个比特
{
	return (c >> i) & 1;
	//c右移i位
}
void SetBit(char &c, int i, int v)  //设置字符c的第i位
{
	if(v){ //v是1, c的第i位换成 1
		c |= (1 << i);
	}
	else{
		c &= ~(1 << i);  
		//1 << i 第i位为1，其他位都为0，再取反，
		//与c&后，c的第i位为0，其他位不变
	}
}
void FlipBit(char &c, int i)  //将c的第i位进行翻转
{
	c ^= (1 << i); //异或
}
void OutputResult(int t, char result[])  //输出结果
{
	cout << "PUZZLE #" << t <<endl;
	for(int i = 0; i < 5; i++){
		for(int j = 0; j < 6; j++){
			cout << GetBit(result[i], j); //输出第i行第j列的比特
			if( j < 5)
				cout << " ";
		}
		cout << endl;
	}
}
int main()
{
	int T;
	cin >> T;  //T组数据
	for(int t = 1; t <= T; t++){  //读入原始灯状态矩阵
		for(int i = 0; i <5; i++){
			for(int j = 0; j < 6; j++){
				int s;
				cin >> s;
				SetBit(oriLights[i], j, s);
			}
		}
		for(int n = 0; n < 64; n++){//每行数据状态有2^6=64种，每个n的值对应一种状态
			int switchs = n;  //switchs代表当前行的开关状态
			memcpy(lights, oriLights, sizeof(oriLights));
			//将lights复制到orilights
			for(int i = 0; i < 5; i++){  //依次处理每一行灯
				result[i] = switchs;
				for(int j = 0; j < 6; j++){
					if(GetBit(switchs, j)){  //第i行j列的灯状态为1，
						//对第i行的灯状态进行翻转
						if(j > 0){
							FlipBit(lights[i], j - 1);
						}
						FlipBit(lights[i], j);
						if(j < 5){
							FlipBit(lights[i], j + 1);
						}
					}
				}
				if(i < 4){  //对第i+1行所有灯进行处理，异或
					lights[i + 1] ^= switchs;
				}
				switchs = lights[i];
			}
			//以上代码确保前四行灯状态都是0
			//此次操作是否成功取决于，最后一行灯是否全灭
			//最后一行灯只要有一个亮就继续枚举下一种情况
			if(lights[4] == 0){
				OutputResult(t, result);
				break;
			}
		}
	}
	return 0;
}
